﻿using Common.Contract.Authentication.Record;
using Common.Contract.Authentication.Request;
using Common.Contract.Authentication.Response;
using System.ServiceModel;
using System.Web;

namespace Common.Contract.Authentication
{
    [ServiceContract]
    public interface IAuthentication
    {
        //#region Application Command
        //[OperationContract]
        //RetrieveApplicationResponse RetrieveApplication(RetrieveApplicationRequest request);

        //[OperationContract]
        //SearchApplicationsResponse SearchApplications(SearchApplicationsRequest request);
        //#endregion

        #region User Command
        [OperationContract]
        CheckLoginResponse CheckLogin(UserRecord userRecord, HttpRequestBase Request = null);

        [OperationContract]
        RetrieveUserResponse RetrieveUserByUserName(RetrieveUserByUserNameRequest request);
        [OperationContract]
        RetrieveUserResponse RetrieveUserByDao(RetrieveUserByDaoRequest request);

        [OperationContract]
        RetrieveCustomerCountByGroupResponse RetrieveCustomerCountByGroup(RetrieveCustomerCountByGroupRequest request);

        [OperationContract]
        RetrieveListMsboResponse RetrieveListMsbo(RetrieveListMsboRequest request);

        //[OperationContract]
        //UserRecord RetrieveUserByEmail(Guid applicationKey, string email);

        //[OperationContract]
        //ResponseRecord RegisterUser(RegisterUserRequest request);


        //[OperationContract]
        //RetrieveUsersResponse RetrieveUsers(RetrieveUsersRequest request);
        #endregion
        #region Dao Manager

        [OperationContract]
        ResponseRecord UpdateRequestDaoByGuest(UpdateCreateDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateRequestDaoByList(UpdateCreateDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateResultCreateDaoByList(UpdateCreateDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateStatusRequestDao(UpdateCreateDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateStatusListRequestDao(UpdateCreateDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UploadOfferLetter(UpdateCreateDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateRejectReason(UpdateCreateDaoRequestRequest request);
        [OperationContract]
        RetrieveListRequestCreateDaoByUserResponse RetrieveListRequestCreateDaoByUser(RetrieveListRequestCreateDaoByUserRequest request);
        [OperationContract]
        RetrieveCreateDaoRequestByIdResponse RetrieveCreateDaoRequestById(RetrieveCreateDaoRequestByIdRequest request);
        #endregion
        #region Change Dao
        [OperationContract]
        RetrieveListChangeDaoRequestResponse RetrieveListChangeDaoRequest(RetrieveListChangeDaoRequestRequest request);
        [OperationContract]
        RetrieveListChangeDaoRequestResponse RetrieveListChangeDaoForExportRequest(RetrieveListChangeDaoRequestRequest request);
        [OperationContract]
        RetrieveChangeDaoCifResponse RetrieveChangeDaoCif(RetrieveChangeDaoCifRequest request);
        [OperationContract]
        ResponseRecord UpdateChangeDaoStatus(UpdateChangeDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateChangeDaoRequest(UpdateChangeDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateChangeDaoRequestByCifAndProduct(UpdateChangeDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateChangeDaoRequestMultiple(UpdateChangeDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateStatusListChangeDaoRequest(UpdateChangeDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateRejectChangeDaoReason(UpdateChangeDaoRequestRequest request);
        #endregion
        #region Close Dao
        [OperationContract]
        RetrieveListCloseDaoRequestResponse RetrieveListCloseDaoRequest(RetrieveListCloseDaoRequestRequest request);
        [OperationContract]
        RetrieveListCloseDaoRequestResponse RetrieveListCloseDaoRequestForExport(RetrieveListCloseDaoRequestRequest request);
        [OperationContract]
        ResponseRecord AddListCloseDaoRequest(UpdateCloseDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateStatusCloseDao(UpdateCloseDaoRequestRequest request);
        [OperationContract]
        RetrieveCloseDaoInfoResponse RetrieveCloseDaoInfoById(RetrieveCloseDaoInfoRequest request);
        [OperationContract]
        ResponseRecord UpdateStatusListCloseDaoRequest(UpdateCloseDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UploadOfferLetterCloseDao(UpdateCloseDaoRequestRequest request);
        #endregion

        #region Edit Dao
        [OperationContract]
        RetrieveEditDaoRequestForExelResponse RetrieveListEditDaoRequestForExport(RetrieveEditDaoRequestRequest request);

        [OperationContract]
        RetrieveEditDaoRequestResponse RetrieveEditDaoRequest(RetrieveEditDaoRequestRequest request);

        [OperationContract]
        ResponseRecord AddEditDaoRequest(UpdateEditDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateStatusEditDao(UpdateEditDaoRequestRequest request);
        [OperationContract]
        ResponseRecord UpdateStatusListEditDaoRequest(UpdateEditDaoRequestRequest request);
        [OperationContract]
        RetrieveEditDaoRequestDetailResponse RetrieveEditDaoRequestDetail(RetrieveEditDaoRequestDetailRequest request);
        #endregion

        #region SaleCode
        [OperationContract]
        RetrieveListSaleCodeResponse RetrieveListSaleCode(RetrieveListSaleCodeRequest request);
        #endregion
        #region Role reference with Group | User Command
        [OperationContract]
        RetrieveGroupRolesResponse RetrieveGroupRoles(RetrieveGroupRolesRequest request);

        [OperationContract]
        RetrieveUserRolesResponse RetrieveUserRoles(RetrieveUserRolesRequest request);
        [OperationContract]
        ResponseRecord SaveActionLog(SaveActionLogRequest request);

        //[OperationContract]
        //ResponseRecord DeleteUserRoles(DeleteUserRolesRequest request);

        //[OperationContract]
        //ResponseRecord DeleteGroupRoles(DeleteGroupRolesRequest request);

        //[OperationContract]
        //ResponseRecord SaveGroupRoles(SaveGroupRolesRequest request);

        //[OperationContract]
        //ResponseRecord SaveUserRoles(SaveUserRolesRequest request);
        //#endregion

        //#region Role command
        //[OperationContract]
        //SearchRolesResponse SearchRoles(SearchRolesRequest request);

        //[OperationContract]
        //ResponseRecord AddRole(AddRoleRequest request);

        //[OperationContract]
        //ResponseRecord UpdateRole(UpdateRoleRequest request);

        //[OperationContract]
        //ResponseRecord DeleteRole(DeleteRoleRequest request);
        #endregion


        #region Object Command
        //[OperationContract]
        //ResponseRecord AddObject(AddObjectRequest request);

        [OperationContract]
        RetrieveObjectsResponse RetrieveObjects(RetrieveObjectsRequest request);

        //[OperationContract]
        //ResponseRecord DeleteObject(DeleteObjectRequest request);

        //[OperationContract]
        //ResponseRecord UpdateObject(UpdateObjectRequest request);
        //#endregion

        //#region Group Command
        //[OperationContract]
        //ResponseRecord DeleteGroup(DeleteGroupRequest request);

        //[OperationContract]
        //ResponseRecord UpdateGroup(UpdateGroupRequest request);

        //[OperationContract]
        //ResponseRecord AddGroup(AddGroupRequest request);

        //[OperationContract]
        //RetrieveGroupsResponse RetrieveGroups(RetrieveGroupsRequest request);
        #endregion

        [OperationContract]
        ResponseRecord UpdateUserQuestion(UpdateUserQuestionRequest request);

        [OperationContract]
        RetrieveDateBusinessResponse RetrieveDateBusiness(RetrieveDateBusinessRequest request);

        [OperationContract]
        RetrieveListChangeDaoRequestResponse RetrieveListChangeDaoRequestForSendMail(RetrieveListChangeDaoRequestRequest request);
        [OperationContract]
        RetrieveChangeDaoCifResponse RetrieveChangeDaoCifByListCif(RetrieveChangeDaoCifRequest request);
    }
}
